#Boa:Frame:Comunica

import wx
import wx.richtext
import wx.lib.masked.timectrl
import wx.lib.masked.textctrl
import wx.gizmos
import wx.lib.analogclock
import wx.stc
import consultasBD
import utiles

def create(parent,datos,activado,lista):
    return Comunica(parent,datos,activado,lista)

[wxID_COMUNICA, wxID_COMUNICAANALOGCLOCK1, wxID_COMUNICABUTTON1, 
 wxID_COMUNICABUTTON2, wxID_COMUNICABUTTON3, wxID_COMUNICABUTTON4, 
 wxID_COMUNICABUTTON5, wxID_COMUNICABUTTON6, wxID_COMUNICACOMBOBOX1, 
 wxID_COMUNICACOMBOBOX2, wxID_COMUNICACOMBOBOX3, wxID_COMUNICAPANEL1, 
 wxID_COMUNICARICHTEXTCTRL1, wxID_COMUNICASTATICTEXT1, 
 wxID_COMUNICASTATICTEXT2, wxID_COMUNICASTATICTEXT3, wxID_COMUNICASTATICTEXT4, 
 wxID_COMUNICASTATICTEXT5, wxID_COMUNICASTATICTEXT6, wxID_COMUNICASTATICTEXT7, 
 wxID_COMUNICASTATICTEXT8, wxID_COMUNICATEXTCTRL1, wxID_COMUNICATEXTCTRL10, 
 wxID_COMUNICATEXTCTRL11, wxID_COMUNICATEXTCTRL12, wxID_COMUNICATEXTCTRL2, 
 wxID_COMUNICATEXTCTRL3, wxID_COMUNICATEXTCTRL4, wxID_COMUNICATEXTCTRL5, 
 wxID_COMUNICATEXTCTRL6, wxID_COMUNICATEXTCTRL7, wxID_COMUNICATEXTCTRL8, 
 wxID_COMUNICATEXTCTRL9, 
] = [wx.NewId() for _init_ctrls in range(33)]

[wxID_COMUNICATIMER1, wxID_COMUNICATIMER2, 
] = [wx.NewId() for _init_utils in range(2)]

class Comunica(wx.Frame):
    def _init_utils(self):
        # generated method, don't edit
        self.timer1 = wx.Timer(id=wxID_COMUNICATIMER1, owner=self)

        self.timer2 = wx.Timer(id=wxID_COMUNICATIMER2, owner=self)

    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_COMUNICA, name='Comunica', parent=prnt,
              pos=wx.Point(6, 122), size=wx.Size(581, 373),
              style=wx.DEFAULT_FRAME_STYLE,
              title='Comunicacion con el cliente')
        self._init_utils()
        self.SetClientSize(wx.Size(573, 346))

        self.panel1 = wx.Panel(id=wxID_COMUNICAPANEL1, name='panel1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(573, 346),
              style=wx.TAB_TRAVERSAL)
        self.panel1.Bind(wx.EVT_MOUSE_EVENTS, self.OnPanelMouseEvent)

        self.comboBox3 = wx.ComboBox(choices=[], id=wxID_COMUNICACOMBOBOX3,
              name='comboBox3', parent=self.panel1, pos=wx.Point(152, 144),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox3.SetLabel('')
        self.comboBox3.SetEditable(False)

        self.staticText1 = wx.StaticText(id=wxID_COMUNICASTATICTEXT1,
              label='Fecha', name='staticText1', parent=self.panel1,
              pos=wx.Point(16, 0), size=wx.Size(29, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_COMUNICASTATICTEXT2,
              label='Cliente', name='staticText2', parent=self.panel1,
              pos=wx.Point(88, 0), size=wx.Size(33, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_COMUNICASTATICTEXT3,
              label='Cumple', name='staticText3', parent=self.panel1,
              pos=wx.Point(88, 40), size=wx.Size(35, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_COMUNICASTATICTEXT4,
              label='Duracion', name='staticText4', parent=self.panel1,
              pos=wx.Point(440, 208), size=wx.Size(42, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_COMUNICASTATICTEXT5,
              label='Registro de la conversacion', name='staticText5',
              parent=self.panel1, pos=wx.Point(16, 168), size=wx.Size(132, 13),
              style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL1,
              name='textCtrl1', parent=self.panel1, pos=wx.Point(16, 16),
              size=wx.Size(72, 21), style=0, value='')
        self.textCtrl1.SetEditable(False)

        self.textCtrl2 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL2,
              name='textCtrl2', parent=self.panel1, pos=wx.Point(88, 16),
              size=wx.Size(64, 21), style=0, value='')
        self.textCtrl2.SetEditable(False)

        self.textCtrl3 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL3,
              name='textCtrl3', parent=self.panel1, pos=wx.Point(152, 16),
              size=wx.Size(248, 21), style=0, value='')
        self.textCtrl3.SetEditable(False)

        self.textCtrl4 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL4,
              name='textCtrl4', parent=self.panel1, pos=wx.Point(88, 56),
              size=wx.Size(48, 21), style=0, value='')
        self.textCtrl4.SetEditable(False)

        self.textCtrl5 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL5,
              name='textCtrl5', parent=self.panel1, pos=wx.Point(152, 80),
              size=wx.Size(248, 21), style=0, value='')
        self.textCtrl5.SetEditable(False)

        self.textCtrl6 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL6,
              name='textCtrl6', parent=self.panel1, pos=wx.Point(152, 104),
              size=wx.Size(248, 21), style=0, value='')
        self.textCtrl6.SetEditable(False)

        self.button1 = wx.Button(id=wxID_COMUNICABUTTON1, label='Comienzo',
              name='button1', parent=self.panel1, pos=wx.Point(408, 144),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnComienzo,
              id=wxID_COMUNICABUTTON1)

        self.button2 = wx.Button(id=wxID_COMUNICABUTTON2, label='Finalizacion',
              name='button2', parent=self.panel1, pos=wx.Point(408, 176),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnFinalizacion,
              id=wxID_COMUNICABUTTON2)

        self.textCtrl7 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL7,
              name='textCtrl7', parent=self.panel1, pos=wx.Point(504, 144),
              size=wx.Size(56, 21), style=0, value='')
        self.textCtrl7.SetEditable(False)

        self.textCtrl8 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL8,
              name='textCtrl8', parent=self.panel1, pos=wx.Point(504, 176),
              size=wx.Size(56, 21), style=0, value='')
        self.textCtrl8.SetEditable(False)

        self.textCtrl9 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL9,
              name='textCtrl9', parent=self.panel1, pos=wx.Point(504, 208),
              size=wx.Size(56, 21), style=0, value='')
        self.textCtrl9.SetEditable(False)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_COMUNICACOMBOBOX1,
              name='comboBox1', parent=self.panel1, pos=wx.Point(408, 280),
              size=wx.Size(152, 21), style=0, value='')
        self.comboBox1.SetLabel('')

        self.button4 = wx.Button(id=wxID_COMUNICABUTTON4, label='Grabar',
              name='button4', parent=self.panel1, pos=wx.Point(408, 312),
              size=wx.Size(56, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnGuardar,
              id=wxID_COMUNICABUTTON4)

        self.button5 = wx.Button(id=wxID_COMUNICABUTTON5, label='Salir',
              name='button5', parent=self.panel1, pos=wx.Point(504, 312),
              size=wx.Size(56, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_COMUNICABUTTON5)

        self.button3 = wx.Button(id=wxID_COMUNICABUTTON3, label='Modificar',
              name='button3', parent=self.panel1, pos=wx.Point(408, 32),
              size=wx.Size(75, 23), style=0)
        self.button3.Enable(False)
        self.button3.Bind(wx.EVT_BUTTON, self.OnModifica,
              id=wxID_COMUNICABUTTON3)

        self.analogClock1 = wx.lib.analogclock.analogclock.AnalogClock(id=wxID_COMUNICAANALOGCLOCK1,
              name='analogClock1', parent=self.panel1, pos=wx.Point(408, 64),
              size=wx.Size(80, 64), style=0)
        self.analogClock1.Bind(wx.EVT_SET_FOCUS, self.OnSetFocusRelojAnalogico)

        self.richTextCtrl1 = wx.richtext.RichTextCtrl(id=wxID_COMUNICARICHTEXTCTRL1,
              parent=self.panel1, pos=wx.Point(16, 184), size=wx.Size(384, 128),
              style=wx.richtext.RE_MULTILINE, value='')
        self.richTextCtrl1.SetLabel('text')
        self.richTextCtrl1.Bind(wx.richtext.EVT_RICHTEXT_CHARACTER,
              self.OnCaracter, id=wxID_COMUNICARICHTEXTCTRL1)
        self.richTextCtrl1.Bind(wx.richtext.EVT_RICHTEXT_DELETE, self.OnDelete,
              id=wxID_COMUNICARICHTEXTCTRL1)

        self.textCtrl10 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL10,
              name='textCtrl10', parent=self.panel1, pos=wx.Point(16, 320),
              size=wx.Size(32, 21), style=0, value='0')
        self.textCtrl10.SetEditable(False)

        self.staticText6 = wx.StaticText(id=wxID_COMUNICASTATICTEXT6,
              label='(maximo 500 caracteres)', name='staticText6',
              parent=self.panel1, pos=wx.Point(56, 320), size=wx.Size(119, 13),
              style=0)

        self.staticText7 = wx.StaticText(id=wxID_COMUNICASTATICTEXT7,
              label='Resultado de la llamada', name='staticText7',
              parent=self.panel1, pos=wx.Point(408, 264), size=wx.Size(113, 13),
              style=0)

        self.textCtrl11 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL11,
              name='textCtrl11', parent=self.panel1, pos=wx.Point(152, 56),
              size=wx.Size(248, 21), style=0, value='')
        self.textCtrl11.SetEditable(False)

        self.textCtrl12 = wx.TextCtrl(id=wxID_COMUNICATEXTCTRL12,
              name='textCtrl12', parent=self.panel1, pos=wx.Point(408, 280),
              size=wx.Size(152, 21), style=0, value='')
        self.textCtrl12.Show(False)
        self.textCtrl12.SetEditable(False)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_COMUNICACOMBOBOX2,
              name='comboBox2', parent=self.panel1, pos=wx.Point(16, 144),
              size=wx.Size(136, 21), style=0, value='')
        self.comboBox2.SetLabel('')
        self.comboBox2.SetEditable(False)
        self.comboBox2.Bind(wx.EVT_COMBOBOX, self.OnSucuVendedoraCombobox,
              id=wxID_COMUNICACOMBOBOX2)

        self.staticText8 = wx.StaticText(id=wxID_COMUNICASTATICTEXT8,
              label='Sucursal / Usuario', name='staticText8',
              parent=self.panel1, pos=wx.Point(16, 128), size=wx.Size(86, 13),
              style=0)

        self.button6 = wx.Button(id=wxID_COMUNICABUTTON6, label='Ver Historial',
              name='button6', parent=self.panel1, pos=wx.Point(488, 32),
              size=wx.Size(75, 23), style=0)
        self.button6.Bind(wx.EVT_BUTTON, self.OnVerHistorial,
              id=wxID_COMUNICABUTTON6)

    def __init__(self, parent,datos="",activado=True,lista=[]):
        self.activacion = activado
        milista = lista
        self._init_ctrls(parent)
        if datos=="":
            utiles.mensaje(None,"No se pasaron datos del cliente")
            self.Close()
            return
        fecha = utiles.obtenerFecha("d-m-Y")
        self.textCtrl1.SetLabel(fecha)
        self.textCtrl2.SetLabel(datos["idcliente"])
        self.textCtrl3.SetLabel(datos["nombre"])
        self.textCtrl4.SetLabel(datos["cumple"])
        self.textCtrl5.SetLabel(datos["telefono"])
        self.textCtrl6.SetLabel(datos["email"])
        self.textCtrl11.SetLabel(datos["localidad"])
        self.richTextCtrl1.Enable(False)
        self.button3.Enable(True)
        if not self.activacion:
            self.button1.Enable(False)
            self.button2.Enable(False)
            self.button3.Enable(False)
            self.button4.Enable(False)
            self.button6.Show(False)
            self.comboBox1.Show(False)
            self.comboBox2.Enable(False)
            self.textCtrl12.Show(True)
            self.richTextCtrl1.Enable(False)
            self.llenarDatos(milista)
        else:
            self.cargarCombosSucursales()
            self.cargarCombosVendedoras()
        self.inicializacion()
        self.comboBox3.SetFocus()

    def inicializacion(self):
        self.comboBox1.Append("Se hablo con el cliente")
        self.comboBox1.Append("No se encontraba, se dejo el mensaje")
        self.comboBox1.Append("Se dejo mensaje en buzon")
        self.comboBox1.Append("No habia nadie")

    def cargarCombosSucursales(self):
        SQL = "SELECT nombre FROM sucursales"
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox2.Append(item["nombre"])
        sucursal = utiles.getSucursalActiva()
        self.comboBox2.SetSelection(int(sucursal)-1)

    def cargarCombosVendedoras(self):
        sucursal=self.comboBox2.GetSelection()+1
        self.comboBox3.Clear()
        SQL = "SELECT * FROM vendedoras WHERE sucursal='%s'" % (sucursal)
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox3.Append(item["nombre"])
        self.button1.SetFocus()

    def OnSucuVendedoraCombobox(self, event):
        nombre = self.comboBox2.GetValue()
        SQL = "SELECT codsucursal FROM sucursales WHERE nombre='%s'" % (nombre)
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox3.SetValue("")
        self.cargarCombosVendedoras()
        
    def llenarDatos(self,lista):
        #lista debe contener hora inicio, fin, duracion y texto
        fecha = str(lista[0]).split(" ")[0]
        anio,mes,dia = fecha.split("-")
        fecha = dia+"-"+mes+"-"+anio
        horacomienzo = lista[1]
        horafinaliza = lista[2]
        duracion = lista[3]
        resultado = lista[4]
        texto = lista[5]
        usuario = lista[6]
        self.textCtrl1.SetLabel(fecha)
        self.textCtrl7.SetLabel(horacomienzo)
        self.textCtrl8.SetLabel(horafinaliza)
        self.textCtrl9.SetLabel(duracion)
        self.textCtrl12.SetLabel(resultado)
        self.richTextCtrl1.SetValue(texto)
        self.textCtrl10.SetLabel(str(len(self.richTextCtrl1.GetValue())))
        self.comboBox3.SetLabel(usuario)

    def OnSalir(self, event):
        self.Close()
        
    def OnModifica(self, event):
        idcliente = self.textCtrl2.GetLabel()
        if idcliente == "":
            self.button1.SetFocus()
            return
        import ModificaClientes
        ventana = ModificaClientes.ModifClientes(None,idcliente)
        try:
            ventana.ShowModal()
        finally:
            ventana.Destroy()

    def OnComienzo(self, event):
        fecha = utiles.obtenerFecha("d-m-Y h:m:s")
        self.textCtrl7.SetLabel(fecha[-8:])
        self.button1.Enable(False)
        self.richTextCtrl1.Enable(True)
        self.richTextCtrl1.SetFocus()

    def OnFinalizacion(self, event):
        if self.textCtrl7.GetLabel()=="":
            texto = "No puede finalizar la llamada sin haberla iniciado."
            texto+= "\n--> COMIENZO"
            utiles.mensaje(None,texto)
            self.button1.SetFocus()
            return
        fecha = utiles.obtenerFecha("d-m-Y h:m:s")
        self.textCtrl8.SetLabel(fecha[-8:])
        self.button2.Enable(False)
        hora2 = int(fecha[11:13])
        minu2 = int(fecha[14:16])
        segu2 = int(fecha[-2:])
        fecha = "00-00-0000 "+self.textCtrl7.GetLabel()
        hora1 = int(fecha[11:13])
        minu1 = int(fecha[14:16])
        segu1 = int(fecha[-2:])
        
        hora = 0
        minu = 0
        segu = 0
        if segu2>=segu1: segu = segu2 - segu1
        else: 
            aux = 60 - segu1
            segu = aux + segu2
            minu2-=1
        if minu2>=minu1: minu = minu2 - minu1
        else:
            aux = 60 - minu1
            minu = aux + minu2
            hora2-=1
        if hora2>=hora1: hora = hora2 - hora1
        else:
            aux = 12 - hora1
            hora = aux + hora2
        
        hora = str(hora).zfill(2)
        minu = str(minu).zfill(2)
        segu = str(segu).zfill(2)

        duracion = hora+":"+minu+":"+segu
        self.textCtrl9.SetLabel(duracion)
        self.comboBox1.SetFocus()

    def OnCaracter(self, event):
        if not self.activacion:
            return
        self.textCtrl10.SetLabel(str(len(self.richTextCtrl1.GetValue())))
        fecha = utiles.obtenerFecha("d-m-Y h:m:s")
        self.textCtrl8.SetLabel(fecha[-8:])
        if len(self.richTextCtrl1.GetValue())>500:
            utiles.mensaje(None,"Maximo permitido: 500 caracteres\nHa llegado al limite")
            texto = self.richTextCtrl1.GetValue()[:500]
            self.textCtrl10.SetLabel(str(len(self.richTextCtrl1.GetValue())))
            self.richTextCtrl1.SetValue(texto)
            return

    def OnDelete(self, event):
        if not self.activacion:
            return
        self.textCtrl10.SetLabel(str(len(self.richTextCtrl1.GetValue())))
        if self.textCtrl7.GetLabel()<>"":
            fecha = utiles.obtenerFecha("d-m-Y h:m:s")
            self.textCtrl8.SetLabel(fecha[-8:])
        
    def OnPanelMouseEvent(self, event):
        if not self.activacion:
            return
        if self.textCtrl7.GetLabel()<>"":
            fecha = utiles.obtenerFecha("d-m-Y h:m:s")
            self.textCtrl8.SetLabel(fecha[-8:])
        
    def OnSetFocusRelojAnalogico(self, event):
        self.button1.SetFocus()

    def OnGuardar(self, event):
        fecha = utiles.obtenerFecha("Y-m-d h:m:s")
        idcliente = self.textCtrl2.GetLabel()
        horacomienzo = self.textCtrl7.GetLabel()
        horafinaliza = self.textCtrl8.GetLabel()
        duracion = self.textCtrl9.GetLabel()
        resultado = self.comboBox1.GetLabel()[:40]
        texto = self.richTextCtrl1.GetValue()[:500]
        usuario = self.comboBox3.GetLabel()
        if horacomienzo == "":
            utiles.mensaje(None,"Debe iniciar la comunicacion\n--> COMIENZO")
            self.button1.SetFocus()
            return
        if horafinaliza == "":
            utiles.mensaje(None,"Debe finalizar la comunicacion\n--> FINALIZACION")
            self.button2.SetFocus()
            return
        if resultado == "":
            utiles.mensaje(None,'Indique el resultado\n--> "Resultado de la llamada"')
            self.comboBox1.SetFocus()
            return
        if usuario == "":
            utiles.mensaje(None,'Debe seleccionar un usuario')
            self.comboBox3.SetFocus()
            return
        r1 = "clientehistorial(fecha,idcliente,horacomienzo,horafinaliza,"
        r2 = "duracion,resultado,texto,usuario)"
        tablaSQL = r1+r2
        r1 = "('"+fecha+"','"+idcliente+"','"+horacomienzo+"','"+horafinaliza
        r2 = "','"+duracion+"','"+resultado+"','"+texto+"','"+usuario+"')"
        camposSQL = r1+r2
        id = consultasBD.executaInsertSQL(None,tablaSQL,camposSQL)
        print "Grabada comunicacion",fecha,idcliente

        self.Close()

    def OnVerHistorial(self, event):
        idcliente = self.textCtrl2.GetLabel()
        import HistorialCliente
        appBack = HistorialCliente.create(None,idcliente)
        appBack.Show()
        return
